package cacy.leetcode.linkedList;

/**
 * Project: LeetcodePractice
 * Package: cacy.leetcode.practice20250217
 * Class:   LinkedList02
 * Description:
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
 * 返回删除后的链表的头节点。
 *
 * 示例 1：
 * 输入：head = [4,5,1,9], val = 5
 * 输出：[4,1,9]
 * 解释：给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
 *
 * 示例 2：
 * 输入：head = [4,5,1,9], val = 1
 * 输出：[4,5,9]
 * 解释：给定你链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9.
 *
 * 说明：
 *     题目保证链表中节点的值互不相同
 *
 * @Date: 2025/2/17 周一
 * @Time: 14:24
 * @Author: 凯齐
 */

class Solution02 {
    public ListNode deleteNode(ListNode head, int val) {
        ListNode nodeLow = head;
        ListNode nodeFast = head.next;
        while (nodeFast != null) {
            if (nodeFast.val == val) {
                nodeLow.next = nodeFast.next;
                break;
            }
            nodeLow = nodeLow.next;
            nodeFast = nodeFast.next;
        }
        if (val == head.val) {
            head = head.next;
        }
        return head;
    }
}

public class LinkedList02 {
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.push(2);
        head.push(3);
        head.push(4);
        head = new Solution02().deleteNode(head, 2);
        while (head != null) {
            System.out.print(head.val + " ");
            head = head.next;
        }
    }
}
